Serwer WWW w Pytigonie nie jest pojedynczym bytem — to warstwowa abstrakcja, która dostosowuje się do swojego otoczenia. Programujesz na localhoście? Produkcja za Nginxem? Uruchamianie wewnątrz kontenera Docker? Warstwa serwerowa Pytigona obsłuży każdy z tych przypadków bez zmiany choćby jednej linijki kodu aplikacji.
Serwer Pytigona posługuje się jednocześnie wieloma protokołami, z których każdy jest zoptymalizowany pod inny wzorzec komunikacji:
Każdy widok Django w Pytigonie pełni jednocześnie rolę punktu końcowego REST. Generyczne widoki tabel automatycznie udostępniają operacje list, add, edit i delete przez HTTP. Dodaj ?format=json do dowolnego adresu URL listy, a zamiast tabel HTML otrzymasz dane w formacie odczytywalnym maszynowo.
Kluczowe punkty końcowe podążają za następującą strukturą adresów URL:
[app_name]/table/[TableName]/ → HTML table (list view)
[app_name]/table/[TableName]/list/ → AJAX list data
[app_name]/table/[TableName]/[id]/edit/ → Edit form
[app_name]/table/[TableName]/add/ → Add form
[app_name]/table/[TableName]/action/[action_name]/ → Custom actions
[app_name]/table/[TableName]/[id]/[target]/[view_type]/ → Complex view
Django Channels zapewnia obsługę WebSocketów do dwukierunkowej komunikacji w czasie rzeczywistym. Pytigon rozszerza to o:
consumers.pyDla aplikacji, które wymagają drobnoziarnistego pobierania danych, Pytigon integruje GraphQL poprzez system ObjectType z Django. Zdefiniuj swój schemat, a klienci będą mogli żądać dokładnie tych pól, których potrzebują — ni mniej, ni więcej.
Do integracji z systemami starszej generacji Pytigon udostępnia punkty końcowe XML-RPC. Zadania w tle można rejestrować jako funkcje RPC, wywoływalne z dowolnego klienta XML-RPC.
Pytigon zawiera niestandardowy pomost ASGI (schhttptools.asgi_bridge), który umożliwia komunikację między klientem desktopowym a wbudowanym serwerem. Pomost ten:
python manage.py runserver
Serwer deweloperski Django. Automatyczne przeładowywanie (hot-reloading). Pasek debugowania. Wszystkie miłe rzeczy, które programiści uwielbiają. Plus Daphne do obsługi WebSocketów.
Na produkcji Pytigon zaleca:
Nginx → Gunicorn (WSGI) + Daphne (ASGI) → Django
Nginx obsługuje: - Serwowanie plików statycznych - Terminację SSL - Równoważenie obciążenia - Buforowanie żądań
Gunicorn obsługuje WSGI (standardowy HTTP), a Daphne obsługuje ASGI (WebSockety). Oba wskazują na tę samą aplikację Django.
Tryby AppImage i kontenera Docker pakują wszystko — serwer, komponenty klienckie i łączniki baz danych — w jedną przenośną jednostkę. Idealne do środowisk deweloperskich i niewielkich wdrożeń, gdzie narzut pełnej konfiguracji produkcyjnej nie jest uzasadniony.
Serwer nie tylko serwuje strony WWW. Generuje również:
schhtml, konwertującego szablony .ihtml na pliki PDF idealne co do pikselaKażdy format wyjściowy używa innego kontekstu urządzenia (basedc, pdfdc, xlsxdc itd.), ale tego samego szablonu i potoku renderowania.
Pytigon nadbudowuje się na systemie uwierzytelniania Django:
filter_by_permissions(), aby ograniczać, które wiersze widzi użytkownik.ihtml → .html są buforowaneselect_related i prefetch_related, gdzie to możliwe